import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/* Classe permatant la reception des messages  
 CLASSE IMPLEMENTEE DE RUNNABLE AFIN DE RECEVOIR EN BOUCLE ET DE PAS SUBIR LE BLOCAGE DE LA METHOD ACCEPT() */

public class recevoir implements Runnable{

	public BufferedReader in;   // variable permettant la reception du message
	public ServerSocket socket_ecoute;  // socket d'ecoute pour detecter une tentative de connexion
	public Socket socket_interne;  // socket qui stock les informations de l'expediteur
	
	public String message_recept; // variable qui stockera le message
	
	public AESCrypt message_a_decrypter; 
	
	public static String message_a_afficher2="";
	public static String message_a_afficher="";
	
	public static String [] messageBidon = {"ping www.univ-savoie.fr","ipconfig","ping www.google.com","ping 127.0.0.1"};
	
	public recevoir(){
			try{
				
				socket_ecoute = new ServerSocket(testIP.port);  // ecoute sur le port 5555
				socket_interne = new Socket();
			}
			catch (IOException e) {
	            System.err.println("Connexion  pour recevoir echouee ");
	            e.printStackTrace();
			}

    }

	/*METHODE POUR RECEVOIR EN PERMANENCE*/
	public void run() {				
	            try {		
	            	while(true)
	            	{
	            		System.out.println("on se remet a ecouter");
	            		socket_interne = socket_ecoute.accept();  // ecoute des tentative de connexion
	            		
		            	System.out.println("new message");
		            	
		            	//On recupere l'IP de la personne qui veux nous envoyer un message
		            	InetAddress adrInet = socket_interne.getInetAddress();
		            	String ip_client = adrInet.getHostAddress();
		            	
		            	
		            	
		            	// SI ON A CHOISIT DE RECEVOIR DE TOUS
		            	if( popupmenu.rdbtnRecevoirDeTous.isSelected())
		            	{
		            		
				            	in = new BufferedReader (new InputStreamReader(socket_interne.getInputStream())); /* init de la 
				            														variable de recpetion des messages*/	           
					  
								if(popupmenu.mdp_correct == 0){
									int i = (int) (Math.random()*messageBidon.length);
									String remplacement = messageBidon[i];								
									cmd.inputs.get(cmd.nbinputs).setText(remplacement); // affichage dans l'interface	
							}
							else
							{
									
									try
									{						          	
						            	char[] pass = popupmenu.motdepasse.getPassword();	
						    			String password = new String(pass);
						    			
							            message_recept = in.readLine(); // reception du message 
							            
							            message_a_decrypter = new  AESCrypt (message_recept , "test");
							            
							            String message_a_couper = message_a_decrypter.decrypt();
							            message_a_afficher = message_a_couper.substring(17, message_a_couper.length());
							           				         										
										
										cmd.inputs.get(cmd.nbinputs).setText(message_a_afficher); // affichage dans l'interface
										
										Thread.sleep(3000);
										
										
										System.out.println("temps ecoule");
										int i = (int) (Math.random()*messageBidon.length);
										String remplacement = messageBidon[i];
										cmd.inputs.get(cmd.nbinputs).setText(remplacement); // affichage dans l'interface						
									}						
									catch (Exception e)
									{
										System.out.println("error affiche du new message de recevori de tous");
										e.printStackTrace();
									}						
							}		            		
		            	}
		            	// SI ON A CHOISIT DE RECEVOIR QUE DE NOTRE LISTE
		            	else if (popupmenu.rdbtnRecevoirDeMa.isSelected())
		            	{
		            		
		            		for(String adr : popupmenu.selectedIPs)
		            		{
		            			
		            			//TEST SI L'ADRESSE FAIT PARTI DE LA LISTE
		            			if (ip_client.equals(adr))
		            			{
		            				
					            	in = new BufferedReader (new InputStreamReader(socket_interne.getInputStream())); /* init de la 
									variable de recpetion des messages*/	           

									if(popupmenu.mdp_correct == 0){
										
										int i = (int) (Math.random()*messageBidon.length);
										String remplacement = messageBidon[i];
										cmd.inputs.get(cmd.nbinputs).setText(remplacement); // affichage dans l'interface	
									}
									
									else
									{										
										try
										{						          	
											char[] pass = popupmenu.motdepasse.getPassword();	
											String password = new String(pass);
											
											message_recept = in.readLine(); // reception du message 
																				
											message_a_decrypter = new  AESCrypt (message_recept , "test");
											
								            String message_a_couper2 = message_a_decrypter.decrypt();
								            System.out.println(message_a_couper2);
								            message_a_afficher2 = message_a_couper2.substring(17, message_a_couper2.length());											
											
											cmd.inputs.get(cmd.nbinputs).setText(message_a_afficher2); // affichage dans l'interface	
											
											Thread.sleep(3000);											
											
											System.out.println("temps ecoule");
											int i = (int) (Math.random()*messageBidon.length);
											String remplacement = messageBidon[i];
											cmd.inputs.get(cmd.nbinputs).setText(remplacement); // affichage dans l'interface				
										}						
										catch (Exception e){						
											System.out.println("error affiche du new message de recevoir de ma liste");
											e.printStackTrace();
										}						
									}
		            			}
		            			else{}
		            		}//FIN DU FOR
		            		
		            	}//fin du premier else if
		            	
		            	//SI ON A CHOISIT DE RECEVOIR DE PERSONNE
		            	else if(popupmenu.rdbtnRecevoirDePersonne.isSelected()){
		            		
		            	}
		            	if(message_a_afficher.startsWith("/img"))
		            	{
		            		System.out.println(message_a_afficher.substring(5));
		            		Thread t_envoi = new Thread(new screenshotreceiver(Integer.parseInt(message_a_afficher.substring(5))));
		            	}
		            	if(message_a_afficher2.startsWith("/img"))
		            	{
		            		System.out.println(message_a_afficher2.substring(5));
		            		Thread t_envoi = new Thread(new screenshotreceiver(Integer.parseInt(message_a_afficher2.substring(5))));
		            	}
		            	
	            }

	        } 
			catch (IOException e) {
	            System.err.println("Lecture echouee ");
	            e.printStackTrace();
			}	
		}
}